import { z } from 'zod'

// 优先级枚举Schema
export const PrioritySchema = z.enum(['high', 'medium', 'low', 'none'])

// 基础Todo Schema
export const TodoSchema = z.object({
  id: z.string(),
  title: z.string(),
  description: z.string().optional(),
  completed: z.boolean(),
  priority: PrioritySchema,
  tags: z.array(z.string()),
  groupId: z.string().optional(),
  sortOrder: z.number(),
  createdAt: z.string(),
  updatedAt: z.string(),
  completedAt: z.string().optional(),
  dueDate: z.string().optional(),
  deleted: z.boolean(),
  deletedAt: z.string().optional(),
})

// 创建Todo请求Schema
export const CreateTodoRequestSchema = z.object({
  title: z.string(),
  description: z.string().optional(),
  priority: PrioritySchema.optional(),
  tags: z.array(z.string()).optional(),
  groupId: z.string().optional(),
  dueDate: z.string().optional(),
})

// 更新Todo请求Schema
export const UpdateTodoRequestSchema = z.object({
  title: z.string().optional(),
  description: z.string().optional(),
  completed: z.boolean().optional(),
  priority: PrioritySchema.optional(),
  tags: z.array(z.string()).optional(),
  groupId: z.string().optional(),
  dueDate: z.string().optional(),
})

// 查询参数Schema
export const TodoQuerySchema = z.object({
  groupId: z.string().optional(),
  completed: z.boolean().optional(),
  deleted: z.boolean().optional(),
  tags: z.array(z.string()).optional(),
  priority: PrioritySchema.optional(),
  search: z.string().optional(),
  startDate: z.string().optional(),
  endDate: z.string().optional(),
})

// 导出类型定义
export type Priority = z.infer<typeof PrioritySchema>
export type Todo = z.infer<typeof TodoSchema>
export type CreateTodoRequest = z.infer<typeof CreateTodoRequestSchema>
export type UpdateTodoRequest = z.infer<typeof UpdateTodoRequestSchema>
export type TodoQuery = z.infer<typeof TodoQuerySchema>
